package pool;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.ThreadLocalRandom;

import org.junit.Test;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;

import util.DBPoolUtils;

// 池子：池化概念（提升资源复用率，提升效率）
public class PoolDemo {
	@Test
	public void druid() throws SQLException {
		// 1.创建一个DataSource(数据源)对象
		DruidDataSource dds = new DruidDataSource();
		// 2.连数据库四件套
		dds.setDriverClassName("com.mysql.cj.jdbc.Driver");	
		dds.setUrl("jdbc:mysql://localhost:3306/scott_db?charset=utf8&serverTimezone=GMT%2B8");
		dds.setUsername("root");
		dds.setPassword("123456");
		// 3.其他设置
		dds.setInitialSize(5);  // 初始化的连接数量
		dds.setMinIdle(5);      // 最小连接数量
		dds.setMaxActive(10);   // 最大连接数
		dds.setLoginTimeout(30);  // 30秒登录超时
		dds.setQueryTimeout(30);  // 30秒查询超时
		
		for(int i = 0 ; i < 15; i++) {
			// 4.得到连接
			Connection c = dds.getConnection();
			System.out.println(c);
			
			if (ThreadLocalRandom.current().nextBoolean()) {
				System.out.println("连接还回：" + c);
				// 5.关闭连接，连接还回池子
				c.close();
			}
		}
	}

	@Test
	public void test() throws SQLException {
		Connection c = DBPoolUtils.getConnection();
		Statement s = c.createStatement();
		ResultSet set = s.executeQuery("select * from dept");
		while (set.next()) {
			System.out.println(set.getInt(1) + "," + set.getString(2) +"," + set.getString(3));
		}
		set.close();
		s.close();
		c.close();
	}

}
